home *** CD-ROM | disk | FTP | other *** search
/ MASPC 1 / MASPC_1.iso / Demos / Demo DIV / DATA / SETUP / SETUP.PRG < prev   
Encoding:
Text File  |  1997-11-27  |  8.9 KB  |  233 lines

  1. //---------------------------------------------------------------------------
  2. // PROGRAMA: SETUP DE SONIDO
  3. // AUTOR:    DANIEL NAVARRO
  4. // FECHA:    23/03/97
  5. //---------------------------------------------------------------------------
  6.  
  7. SETUP_PROGRAM div_sound_setup;
  8.  
  9. CONST
  10.     max_botones=18;
  11.  
  12. GLOBAL
  13.     STRUCT botones[max_botones] // Estructura general para cada botón
  14.         x,y,                // Coordenadas en pantalla
  15.         graph,              // Gráfico que utiliza al pulsarlo
  16.         inc,                // Incremento que realiza el botón
  17.         max,                // Valor máximo permitido con su incremento
  18.         valor;              // Valor actual del botón
  19.     END=302,2,12,0,0,0,                  // Botón de escape
  20.         159,58,10,-1,0,&setup.card,      // Botón + de selección de tarjeta
  21.         177,58,11,1,7,&setup.card,       // Botón - de selección de tarjeta
  22.         60,98,10,-1,0,&setup.port,       // Botón + de selección de puerto
  23.         78,98,11,1,5,&setup.port,        // Botón - de selección de puerto
  24.         159,98,10,-1,0,&setup.irq,       // Botón + de selección de irq
  25.         177,98,11,1,9,&setup.irq,        // Botón - de selección de irq
  26.         60,138,10,-1,0,&setup.dma,       // Botón + de selección de dma
  27.         78,138,11,1,10,&setup.dma,       // Botón - de selección de dma
  28.         159,138,10,-1,0,&setup.dma2,     // Botón + de selección de dma2
  29.         177,138,11,1,10,&setup.dma2,     // Botón - de selección de dma2
  30.         279,58,10,-1,0,&setup.master,    // Botón + de volumen maestro
  31.         297,58,11,1,15,&setup.master,    // Botón - de volumen maestro
  32.         279,98,10,-1,0,&setup.sound_fx,  // Botón + de volumen canal de efectos
  33.         297,98,11,1,15,&setup.sound_fx,  // Botón - de volumen canal de efectos
  34.         279,138,10,-1,0,&setup.cd_audio, // Botón + de volumen CD audio
  35.         297,138,11,1,15,&setup.cd_audio, // Botón - de volumen CD audio
  36.         2,221,13,0,0,0,
  37.         100,221,14,0,0,0;
  38.  
  39.     // Textos que denominan los tipos de tarjeta de sonido
  40.     tarjeta_sonido[]="No Sound","Sound Blaster 1.5","Sound Blaster 2.0","Sound Blaster Pro",
  41.            "Sound Blaster 16","Sound Blaster AWE","Gravis Ultra Sound","Gravis Ultra Sound MAX";
  42.  
  43.     // Textos que denominan los puertos posibles
  44.     puerto[]="0x210","0x220","0x230","0x240","0x250","0x260";
  45.  
  46.     // Textos que denominan las irq posibles
  47.     irq[]="2","3","5","7","10","11","12","13","14","15";
  48.  
  49.     // Texto que denomiman los canales de dma posibles
  50.     dma[]="0","1","2","3","4","5","6","7","8","9","10";
  51.  
  52.     id_sonido;  // Identificador del sonido usado
  53.  
  54. BEGIN
  55.     // Selecciona el modo de video y la velocidad de impresión
  56.     set_mode(m320x240);
  57.     set_fps(100,0);
  58.  
  59.     fade_on();                      // Enciende la pantalla
  60.     load_fpg("setup\setup.fpg");    // Carga el fichero de gráficos
  61.     put_screen(0,1);                // Pone la pantalla de fondo
  62.  
  63.     FRAME;                          // Imprime todo
  64.  
  65.     dump_type=partial_dump;         // Hace que no se restaure la pantalla
  66.     restore_type=partial_restore;   // para asi ganar velocidad
  67.  
  68.     mouse.graph=100;                // Selecciona el gráfico del ratón
  69.     sombra_ratón(101,4);            // Y crea una sombra del mismo debajo
  70.  
  71.     // Crea todos los botones necesarios
  72.     FROM x=0 TO max_botones;
  73.         botón(x);
  74.     END
  75.  
  76.     // Crea los tres volumenes necesarios
  77.     volumen(1,210,60);
  78.     volumen(2,210,100);
  79.     volumen(3,210,140);
  80.  
  81.     // Muestra los valores de todos los parametros
  82.     muestra_valores();
  83.  
  84.     // Repite indefinidamente
  85.     LOOP
  86.  
  87.         // Si se pulsa la tecla [ESCAPE] sale del programa
  88.         IF (key(_esc)) exit("",0); END
  89.         FRAME;
  90.     END
  91. END
  92.  
  93. //---------------------------------------------------------------------------
  94. // Proceso sombra_ratón
  95. // Pone el gráfico de la sombra del ratón
  96. // Entradas: graph = número de grafico
  97. //           flags = bandera de espejado y transparencia
  98. //---------------------------------------------------------------------------
  99.  
  100. PROCESS sombra_ratón(graph,flags)
  101.  
  102. BEGIN
  103.     z=mouse.z+1;    // Hace que se imprima un plano por debajo del ratón
  104.     LOOP
  105.         // Sus coordenadas estan más a la derecha y más abajo que el ratón
  106.         x=mouse.x+4;
  107.         y=mouse.y+2;
  108.         FRAME;
  109.     END
  110. END
  111.  
  112. //---------------------------------------------------------------------------
  113. // Proceso botón
  114. // Maneja los todos los botones del programa
  115. // Entradas: número = número de botón que tiene que manejar
  116. //---------------------------------------------------------------------------
  117.  
  118. PROCESS botón(número)
  119.  
  120. PRIVATE
  121.     ancho; // Ancho en pixels del botón
  122.  
  123. BEGIN
  124.     // Coge las coordenadas de la tabla de botones
  125.     x=botones[número].x;
  126.     y=botones[número].y;
  127.     // Si el botón es de los dos últimos es más ancho
  128.     IF (número>16) ancho=96; ELSE ancho=16; END
  129.     // Repite indefinidamente
  130.     LOOP
  131.         // Comprueba si se hace click con el ratón encima del botón
  132.         IF (mouse.x>x and mouse.x<x+ancho and
  133.             mouse.y>y and mouse.y<y+16 and mouse.left)
  134.             // Cambia el gráfico por el del botón pulsado
  135.             graph=botones[número].graph;
  136.         ELSE
  137.             // Si la última vez se pulso el botón
  138.             IF (graph<>0)
  139.                 // Quita el gráfico del botón pulsado
  140.                 graph=0;
  141.                 FRAME;
  142.                 // Comprueba que botón es el pulsado
  143.                 switch(número)
  144.                     // Sale del programa
  145.                     case 0:
  146.                         exit("",0);
  147.                     END
  148.                     // Graba la configuración y sale del programa
  149.                     case 17:
  150.                         save("sound.cfg",&setup,sizeof(setup));
  151.                         exit("",0);
  152.                     END
  153.                     // Hace un test de sonido
  154.                     case 18:
  155.                         unload_pcm(id_sonido);  // Descarga el sonido si lo hubiera
  156.                         reset_sound();          // Actualiza los valores de configuración
  157.                         // Carga el sonido de prueba
  158.                         id_sonido=load_pcm("setup\setup.pcm",0);
  159.                         // Si no esta tocando una canción el CD
  160.                         IF (not is_playing_cd())
  161.                             // Hace que suene el CD
  162.                             play_cd(2,0);
  163.                         END
  164.                         // Ejecuta el sonido
  165.                         sound(id_sonido,256,256);
  166.                     END
  167.                     // Para los demás botones
  168.                     default:
  169.                         // Si el incremento a realizar es positivo
  170.                         IF (botones[número].inc>0)
  171.                             // Y si no se sobrepasa el limite
  172.                             IF ([botones[número].valor]<botones[número].max)
  173.                                 // Realiza el incremento
  174.                                 [botones[número].valor]+=botones[número].inc;
  175.                             END
  176.                         ELSE    // Si no, es negativo
  177.                             // Y si tampoco se sobrepasa el limite
  178.                             IF ([botones[número].valor]>botones[número].max)
  179.                                 // Realiza el decremento
  180.                                 [botones[número].valor]+=botones[número].inc;
  181.                             END
  182.                         END
  183.                     END
  184.                 END
  185.                 // Muestra los valores actualizados
  186.                 muestra_valores();
  187.             END
  188.         END
  189.         FRAME;
  190.     END
  191. END
  192.  
  193. //---------------------------------------------------------------------------
  194. // Proceso muestra_valores
  195. // Muestra los valores actualizados
  196. //---------------------------------------------------------------------------
  197.  
  198. PROCESS muestra_valores()
  199.  
  200. BEGIN
  201.     // Borra cualquier texto que hubiera impreso
  202.     delete_text(all_text);
  203.     // Escribe los nuevos textos actualizados
  204.     write(0,12,61,0,tarjeta_sonido[setup.card]);
  205.     write(0,12,101,0,puerto[setup.port]);
  206.     write(0,111,101,0,irq[setup.irq]);
  207.     write(0,12,141,0,dma[setup.dma]);
  208.     write(0,111,141,0,dma[setup.dma2]);
  209.     // Define tres regiones para los tres volumenes configurables
  210.     // con un tamaño proporcional a sus valores
  211.     define_region(1,210,60,4+(4*setup.master),11);
  212.     define_region(2,210,100,4+(4*setup.sound_fx),11);
  213.     define_region(3,210,140,4+(4*setup.cd_audio),11);
  214. END
  215.  
  216. //---------------------------------------------------------------------------
  217. // Proceso volumen
  218. // Maneja los gráficos de los volumenes
  219. // Entradas: region = Número de región del volumén
  220. //           x,y    = Coordenadas en pantalla
  221. //---------------------------------------------------------------------------
  222.  
  223. PROCESS volumen(region,x,y)
  224.  
  225. BEGIN
  226.     // Selecciona el gráfico
  227.     graph=50;
  228.     // Repite indefinidamente
  229.     LOOP
  230.         FRAME;
  231.     END
  232. END
  233.